package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	/*
		os.Stdio、os.Stdout、os.Stderr 是三个预定义的文件描述符，
		它们分别代表 标准输入、标准输出、标准错误。

		通过 os.Stdin、os.Stdout、os.Stderr 可以实现对标准输入输出流的操作，例如 读取用户输入、向终端输出文本等。
	*/
	//实例一：
	scanner := bufio.NewScanner(os.Stdin) //默认是按行读取
	fmt.Println("Enter your name:")
	scanner.Scan()
	name := scanner.Text()
	fmt.Printf("Hello,%s!\n", name)
	/*终端：
	Enter your name:
	喜羊羊 灰太狼 孙悟空
	Hello,喜羊羊 灰太狼 孙悟空!
	*/

	fmt.Println("-----------------------------------")

	//实例二：
	fmt.Println("请输入一个字符串：")
	reader := bufio.NewReader(os.Stdin) //os.Stdin 指向标准输入文件 /dev/stdin，即 os.Stdin 是标准输入文件 /dev/stdin 的指针
	//os.Stdin 是 os包 File结构体 的指针类型
	readString, _ := reader.ReadString('\n') //按行读取
	fmt.Println(readString)
	/*终端：
	请输入一个字符串：
	喜羊羊
	喜羊羊

	*/

	fmt.Println("-------------------------------------------------------")

	//实例三：
	//从标准输入中读取用户输入
	var input string
	fmt.Println("请输入内容：")
	fmt.Scanln(&input)
	fmt.Println("您输入的内容是：", input)

	//向标准输出和向标准错误输出文本
	xyy := "喜羊羊"
	fmt.Fprintf(os.Stdout, "%s\n", xyy)
	fmt.Fprintln(os.Stderr, "这是标准错误")
	/*
		请输入内容：
		哈哈哈
		您输入的内容是： 哈哈哈
		这是标准输出
		这是标准错误
	*/

	//scanner := bufio.NewScanner(os.Stdin)
	//fmt.Println("请输入3个人名：")
	//scanner.Split(bufio.ScanWords)
	//for scanner.Scan() {
	//	fmt.Println(scanner.Text())
	//}
	/*终端：
	请输入3个人名：
	喜羊羊灰太狼 孙悟空 汤姆杰瑞
	喜羊羊灰太狼
	孙悟空
	汤姆杰瑞

	*/

}
